import Vue from 'vue'
import Vuex from 'vuex'

import citys from './city.js'
import params from './param.js'

Vue.use(Vuex)

const PROVINCE_TYPE = 'ProvinceType'

const GuideStatus = {
  '01': '等待导标',
  '02': '已发送',
  '03': '审核中',
  '04': '审核驳回',
  '05': '等待回款',
  '06': '已回款',
  '07': '无需导标',
  '08': '浦发影像类型错误'
}
const CompanyLicense = {
  '0': '私牌',
  '1': '一般公牌',
  '2': 'LCV挂靠公牌'
}

const GPSStatus = {
  '01': '未上传',
  '02': '等待领单',
  '03': '等待审核',
  '04': '退回修改',
  '05': '退回GPS审核',
  '06': '已通过',
  '07': '无需安装'
}

const LoanStatus = {
  '01': '未生成批次',
  '02': '待发送批次',
  '03': '等待放款',
  '04': '已撤销',
  '05': '已退回',
  '06': '已放款',
  '07': '无需放款'
}

const RecordStatus = {
  '01': '未上传',
  '02': '等待领单',
  '03': '等待审核',
  '04': '退回修改',
  '05': '退回备案审核',
  '06': '已通过',
  '07': '无需备案'
}

const ApplyStatus = {
  '01': '新建待提交',
  '02': '风控验证中',
  '03': '已删除',
  '04': '已取消',
  '05': '已拒绝',
  '06': '等待初审领单',
  '07': '等待初审审批',
  '08': '等待复审领单',
  '09': '等待复审审批',
  '10': '退回复审审批',
  '11': '初审退回修改',
  '12': '复审退回修改',
  '13': '等待终审审批',
  '14': '待提交签约资料',
  '15': '等待签约领单',
  '16': '等待签约审批',
  '17': '退回签约审批',
  '18': '签约退回修改',
  '19': '等待上传贷后资料',
  '20': '等待抵押领单',
  '21': '等待抵押审批',
  '22': '退回抵押审批',
  '23': '抵押退回修改',
  '24': '待完成GPS&备案',
  '25': '待完成GPS',
  '26': '待完成备案',
  '27': '等待放款领单',
  '28': '等待放款审批',
  '29': '放款成功',
  '30': '待上传抵押资料',
  '31': '待抵押领单',
  '32': '待抵押审批',
  '33': '抵押退回待提交',
  '34': '等待导标完成',
  '36': '拒绝待复核',
  '37': '风控秒拒拒绝',
  '52': '申请风控拒绝',
  '51': '申请风控退回',
  '61': '初审退回提交风控验证中',
  '62': '复审退回提交风控验证中',
  '35': '流程完成'
}

const Sex = {
  '0': '女',
  '1': '男'
}

const Assure = {
  '0': '否',
  '1': '是'
}

const ManualAuditCode = {
  '1': '审核通过',
  '2': '审核失败（安装照片数量不足）',
  '3': '审核失败（安装照片车型、颜色与系统不符）',
  '4': '审核失败（重拍远照）',
  '5': '审核失败（重拍近照）',
  '6': '审核失败（需更换安装位置）',
  '7': '无线不隐蔽，更换安装位置',
  '8': '请补充无线安装照片',
  '9': 'GPS安装位置不符合要求（GPS设备必须一前一后，有线严禁接发动机舱），重新安装',
  '10': '车铭牌与车不符或车架号与系统不符',
  '11': '车型与系统不符或车身颜色与系统不符',
  '12': 'GPS资料中设备号与系统设备号不符，重新修改核对',
  '13': 'GPS申请表有误，重新检查修改',
  '14': '有线无轨迹，重新验证',
  '15': '无线超时无信号，重新验证',
  '16': 'GPS安装照片与其他客户安装照片完全相同',
  '17': 'GPS设备号重复使用',
  '18': '客户在GPS安装现场	',
  '19': '无线超时无信号',
  '20': '有线无轨迹',
  '100': '其他'
}
/// TODO 后续需要改成调接口的方式 apiUrl：/common/listAppFlow
const AppFlow = {
  1: '先抵押流程（新）',
  2: '先放款流程（新）'
}

/// 车辆档位
const Gears = {
  0: '自动挡',
  1: '手动挡'
}

/// 燃料类型
const FuelType = {
  0: '汽油',
  1: '柴油',
  2: '油电混合',
  3: '纯电动',
  4: '油气混合'
}

/// 车辆用途
const UsagePurpose = {
  1: '非运营',
  2: '运营'
}

/// 账户类型
const AccountType = {
  1: '对公账户',
  2: '对私账户'
}

/// 初审审批决定
const firstApproveDecision = {
  9: '取消',
  11: '通过',
  12: '拒绝',
  13: '退回经销商重新提交'
}

/// 复审审批决定
const reviewApproveDecision = {
  9: '取消',
  11: '通过',
  12: '拒绝',
  13: '退回经销商重新提交',
  14: '退回初审岗'
}

/// 终审审批决定
const finalApproveDecision = {
  9: '取消',
  11: '通过',
  14: '退回复审岗'
}

/// 复议审批决定
const reconsiderApproveDecision = {
  9: '取消',
  12: '复议拒绝',
  16: '复议通过'
}

/// 签约审批决定
const contractApproveDecision = {
  9: '取消',
  11: '通过',
  13: '退回经销商重新提交',
  14: '退回复审岗'
}

/// 退回经销商类型
const backType = {
  'D101': '征信未勾选/错误',
  'D102': '车辆信息错误/未录全',
  'D103': '卖方信息错误',
  'D104': '未接听回访电话',
  'D105': '资料不全',
  'D106': '资料不清晰',
  'D107': '平台费未勾选/错误',
  'D108': '车辆贷款金额错误',
  'D109': '上传附件错误',
  'D110': '合同内信息有误',
  'D111': '人员信息错误（主贷人，紧急联系人，配偶）',
  'D112': '销售未留联系方式',
  'D113': '保单不符合要求',
  'D114': '合同签字不符合要求',
  'D115': '银联卡信息在系统或者合同有误',
  'D116': '抵押渠道有误',
  'D117': '其他',
  'D118': '非人工差错退回'
}

const LCVType = {
  '0': '乘用车',
  '1': 'LCV'
}
/// 退回复审退回类型
const backReviewBackType = {
  '1、操作类风险#': '操作类风险',
  '2、尽职类风险#': '尽职类风险',
  '3、其他#': '其他'
}

/// 第一车网查询结果
const numOneCarWebSearchResult = {
  '0': '无记录',
  '1': '一致',
  '2': '不一致'
}

/// 有无
const hasOrNot = {
  '1': '有',
  '0': '无'
}

/// 车况
const carCondition = {
  '优': '优',
  '良': '良',
  '中': '中',
  '差': '差'
}

/// 附件类型
const attachmentType = {
  '3': '征信授权附件',
  '4': '申请附件',
  '5': '贷前附件',
  '6': '贷后附件',
  '7': '征信报告附件',
  '8': '活体检测附件',
  '27': '商户备案附件',
  '28': '审批附件',
  '29': 'GPS附件',
  '40': '导标附件'
}

const enumStore = new Vuex.Store({
  state: {
    // TODO 这里最好用使用常量的方式，这样可以知道那些地方使用了
    '性别': Sex,
    '是否有担保人': Assure,
    '是否': Assure,
    '流程状态': ApplyStatus,
    '抵押状态': RecordStatus,
    '放款状态': LoanStatus,
    'GPS状态': GPSStatus,
    '乘用车类型': LCVType,
    '公私牌': CompanyLicense,
    '导标状态': GuideStatus,
    '人工审核状态': ManualAuditCode,
    '审批流程': AppFlow,
    '汽车档位': Gears,
    '燃料类型': FuelType,
    '车辆用途': UsagePurpose,
    '账户类型': AccountType,
    '退回经销商类型': backType,
    '退回复审退回类型': backReviewBackType,
    '初审审批决定': firstApproveDecision,
    '复审审批决定': reviewApproveDecision,
    '终审审批决定': finalApproveDecision,
    '终审复议审批决定': reconsiderApproveDecision,
    '签约审批决定': contractApproveDecision,
    '第一车网查询结果': numOneCarWebSearchResult,
    '有无': hasOrNot,
    '车况': carCondition,
    '附件类型': attachmentType
  },
  mutations: {
    addEnum (state, item) {
      if (!state[item.type]) {
        state[item.type] = {}
      }
      state[item.type][item.key] = item.value
    },
    addEnum1 (state, item) {
      for (var name in item) {
        state[name] = item[name]
      }
    }

  },
  actions: {
    initCache ({commit}) {
      const items = [
        {'name': '证件类型', 'mapType': 'value', 'paramType': 20},
        {'name': '婚姻状况', 'mapType': 'value', 'paramType': 12},
        {'name': '学历', 'mapType': 'id', 'paramType': 16},
        {'name': '从事行业', 'mapType': 'id', 'paramType': 3},
        {'name': '职位', 'mapType': 'id', 'paramType': 21},
        {'name': '准驾车型', 'mapType': 'id', 'paramType': 40},
        {'name': '户口性质', 'mapType': 'id', 'paramType': 61},
        {'name': '工作单位性质', 'mapType': 'id', 'paramType': 8},
        {'name': '上传附件类型', 'mapType': 'value', 'paramType': 28},
        {'name': '住房所有权', 'mapType': 'id', 'paramType': 22},
        {'name': '拒绝申请类型', 'mapType': 'value', 'paramType': 25},
        {'name': '通过类型', 'mapType': 'value', 'paramType': 34},
        {'name': '申请附件类型', 'mapType': 'value', 'paramType': 4},
        {'name': '贷前附件类型', 'mapType': 'value', 'paramType': 5},
        {'name': '贷后附件类型', 'mapType': 'value', 'paramType': 6},
        {'name': '住房所有权', 'mapType': 'id', 'paramType': 22},
        {'name': '关系', 'mapType': 'id', 'paramType': 19},
        {'name': '车辆颜色', 'mapType': 'id', 'paramType': 2},
        {'name': '利率档位', 'mapType': 'value', 'paramType': 31},
        {'name': '车类', 'mapType': 'value', 'paramType': 26},
        {'name': '还款期限', 'mapType': 'value', 'paramType': 11},
        {'name': 'GPS档位', 'mapType': 'value', 'paramType': 37},
        {'name': '工作单位规模', 'mapType': 'id', 'paramType': 7},
        {'name': '人身保险档位', 'mapType': 'value', 'paramType': 63},
        {'name': '保险公司', 'mapType': 'value', 'paramType': 1},
        {'name': '评估公司', 'mapType': 'value', 'paramType': 44},
        {'name': '拒绝类型', 'mapType': 'value', 'paramType': 25},
        {'name': '取消类型', 'mapType': 'value', 'paramType': 35},
        {'name': '客户鉴权渠道', 'mapType': 'value', 'paramType': 499},
        {'name': '抵押合同模板', 'mapType': 'value', 'paramType': 503},
        {'name': '已签贷款合同', 'mapType': 'value', 'paramType': 462},
        {'name': 'GPS安装方式', 'mapType': 'value', 'paramType': 45},
        {'name': '浦发信用卡产品', 'mapType': 'id', 'paramType': 53},
        {'name': '收入来源', 'mapType': 'id', 'paramType': 13}
      ]
      for (let item of items) {
        if (!enumStore.state[item.name]) {
          for (let param of params) {
            if (param.type === item.paramType) {
              if (item.mapType === 'value') {
                commit('addEnum', {type: item.name, key: param.value, value: param.name})
              } else {
                commit('addEnum', {type: item.name, key: param.id, value: param.name})
              }
            }
          }
        }
      }
      for (let city of citys) {
        if (city.level === 3) {
          enumStore.commit('addEnum', {type: '区', key: city.code, value: city.name})
        }
        if (city.level === 2) {
          enumStore.commit('addEnum', {type: '市', key: city.code, value: city.name})
        }
        if (city.level === 1) {
          enumStore.commit('addEnum', {type: '省份', key: city.code, value: city.name})
        }
      }
    }
  }
})
export default enumStore
